#include<iostream>
using namespace std;
int f[2050];//f[i]表示结点1到 结点i的最短路径值 
int lcm(int a,int b){//计算最小公倍数
	int t;
	int x=a;
	int y=b;
	while(y!=0){
		t=x%y;
		x=y;
		y=t;
	}
	return a*b/x;
}
int main(){
	for(int i=0;i<2050;i++)		f[i]=0;
	for(int i=1;i<=2021;i++){
		for(int j=i+1;j<=i+21;j++){
			if(f[j]==0)  f[j]=f[i]+lcm(j,i);//如果当前结点的路径是0，则直接赋值为当前结点到前一个结点的最短路径值+最小公倍数
			else	f[j]=min(f[j],f[i]+lcm(j,i));
		}
	}
	cout<<f[2021]<<endl;
	return 0;
} 